home *** CD-ROM | disk | FTP | other *** search
Wrap
package com.extensibility.xml; import com.extensibility.util.Debug; import com.extensibility.util.FilteredEnumerator; import com.extensibility.util.RHashtable; import com.extensibility.util.XASet; import com.extensibility.xml.dt.DataType; import com.extensibility.xml.dt.DataTypeFactory; import com.extensibility.xml.dt.DataTypeIntf; import java.io.IOException; import java.io.Writer; import java.util.Enumeration; import java.util.Hashtable; import java.util.MissingResourceException; import java.util.Vector; import javax.swing.event.ChangeListener; public class ElementDeclaration extends BaseDeclaration implements Cloneable, AttributeDeclaration.Owner, ContentModelOwner, CMTReferent, DeclRef.SourceIntf { public static final int TYPE_MIXED = 4; public static final int TYPE_TAGS_ONLY = 6; public static final int TYPE_TEXT_ONLY = 5; public static final int TYPE_ANY = 2; public static final int TYPE_EMPTY = 3; // $FF: renamed from: cm com.extensibility.xml.ContentModel ContentModel field_0; AttributeGroup attributes; Vector modelsUsed; RHashtable refMetaProp; DeclRef superType; DataType dataType; ChangeListener changer; public ElementDeclaration(String var1) { this(var1, 3); } public ElementDeclaration(String var1, int var2) { super(var1); this.attributes = new AttributeGroup(this); this.modelsUsed = new Vector(); this.refMetaProp = new RHashtable(); this.changer = new 6(this); this.field_0 = new ContentModel(this, var2); } public ElementDeclaration(String var1, DataType var2) { this(var1); this.setDataType(var2); } public BaseDeclaration clone(SchemaIntf var1, SchemaIntf var2, URI var3) { ElementDeclaration var4 = null; try { var4 = (ElementDeclaration)super.clone(); ((BaseDeclaration)var4).setURI(var3); var4.attributes = (AttributeGroup)var4.attributes.clone(var4, var1, var2); var4.field_0 = (ContentModel)var4.field_0.clone(var4, var1, var2); var4.refMetaProp = this.refMetaProp.clone(true); if (this.superType != null) { var4.superType = new DeclRef(this.superType.getName(), this.superType.getTargetClass()); } } catch (CloneNotSupportedException var6) { Debug.assert(false, "Problem cloning ElementDeclaration."); } return var4; } public Object clone() { ElementDeclaration var1 = null; try { var1 = (ElementDeclaration)super.clone(); var1.attributes = new AttributeGroup(var1, this.attributes.getMembers()); var1.field_0 = (ContentModel)var1.field_0.clone(var1); if (this.superType != null) { var1.superType = new DeclRef(this.superType.getName(), this.superType.getTargetClass()); } } catch (CloneNotSupportedException var3) { Debug.assert(false, "Problem cloning ElementDeclaration."); } return var1; } public String getClassName() { return "com.extensibility.xml.ElementDeclaration"; } public Vector getAttributeMembers() { return this.getAttributesCopy(); } public void modelStateChanged(ContentModelTerm var1, int var2, Object var3) { if (var2 == 20) { this.updateRefMetaProp(var3.toString(), var1.getTerm()); } ((BaseDeclaration)this).fireChangeEvent(31, var3); } public void useNotify(ContentModelOwner var1) { this.modelsUsed.addElement(var1); } public void usedByNotify(ContentModelOwner var1) { Debug.assert(false, "models owned by elements can't be used by others"); } public void unuseNotify(ContentModelOwner var1) { Debug.trace(String.valueOf(String.valueOf(((BaseDeclaration)this).getName()).concat(String.valueOf(" got a unuseNotify for "))).concat(String.valueOf(var1.getName()))); if (!this.modelsUsed.removeElement(var1)) { Debug.assert(false, "removing a model that didn't exist"); } } public void unusedByNotify(ContentModelOwner var1) { Debug.trace(String.valueOf(String.valueOf(((BaseDeclaration)this).getName()).concat(String.valueOf(" got a unusedByNotify for "))).concat(String.valueOf(var1.getName()))); Debug.assert(false, "models owned by elements can't be used by others"); } public void visitTerms(ContentModelTerm.Visitor var1, boolean var2) { if (var2) { this.getEffectiveModel().visitTerms(var1, var2); } else { this.field_0.visitTerms(var1, var2); } } public ContentModelTermEnum getTerms(boolean var1) { return var1 ? this.getEffectiveModel().getTerms(var1) : this.field_0.getTerms(var1); } public ContentModelTermEnum getLeafTerms() { return this.getEffectiveModel().getLeafTerms(); } public boolean isSubordinate(BaseDeclaration var1) { return var1 instanceof AttributeDeclaration && ((AttributeDeclaration)var1).getOwner() == this; } public boolean getCMOpen() { return this.field_0.isOpen(); } public boolean getCMisAny() { return this.field_0.isAny(); } public boolean getCMisMixed() { return this.field_0.isMixed(); } public boolean getAllowsData() { return this.dataType != null; } public boolean isTextOnly() { return this.field_0.isTextOnly(); } public boolean getAllowsTags() { if (this.getSuperType() != null) { return !this.field_0.isEmpty() || this.getSuperType().getTargetElement() != null && this.getSuperType().getTargetElement().getAllowsTags(); } else { return !this.getAllowsData() && this.field_0.getAllowsTags(); } } public boolean getAllowsText() { if (this.getSuperType() == null) { return this.field_0.getAllowsText(); } else { return this.getSuperType().getTargetElement() != null && this.getSuperType().getTargetElement().getAllowsText(); } } public ContentModel getContentModel() { return this.field_0; } public String getDefault() { return null; } public DataType getDataType() { return this.dataType; } public String getDataTypeDisplay(SchemaIntf var1) { if (this.getDataType() == null) { return ""; } else if (this.getDataType().equals(DataTypeFactory.createDataType(DataTypeIntf.NOTATED))) { AttributeDeclaration var2 = this.getNotationAttr(); return var2 == null ? "" : var2.getDefault(); } else { return var1.getDataTypeDisplay(this.getDataType()); } } public boolean references(InternalPEDeclaration var1) { if (var1.getAttributeGroup() != null) { return this.attributes.contains(var1.getAttributeGroup()); } else if (var1.getContentModel() != null) { return this.modelsUsed.indexOf(var1) >= 0; } else { return false; } } public String getFirstMissingPrefix(SchemaIntf var1) { Vector var2 = new Vector(); this.visitTerms(new 1(var1, var2, (ElementDeclaration)null), true); return var2.size() == 0 ? null : (String)var2.firstElement(); } public String getFirstMissingTerm(SchemaIntf var1, boolean var2) { Vector var3 = new Vector(); this.visitTerms(new 2(var2, var3, (ElementDeclaration)null), true); return var3.size() == 0 ? null : (String)var3.firstElement(); } public Vector getPrerequisites(SchemaIntf var1) { Vector var2 = super.getPrerequisites(var1); this.attributes.getUsesList(var2); BaseDeclaration var3 = var1.getDeclarationAfter(this); if (var3 != null && var3 instanceof EntityDeclaration && var2 != null && var2.contains(var3)) { var2.removeElement(var3); } this.field_0.getUsesList(var2); if (this.getSuperType() != null && this.getSuperType().getTargetDecl() != null) { var2.addElement(this.getSuperType().getTargetDecl()); } return var2; } public void checkForErrors(SchemaIntf var1) { super.checkForErrors(var1); boolean var2 = var1.isSupported(Class.forName("com.extensibility.xml.NamespaceDeclaration")); String var4 = this.getFirstMissingTerm(var1, var2); if (var4 != null) { super.errors.addElement(new ParserException(210, var4)); } if (var2) { String var5 = this.getFirstMissingPrefix(var1); if (var5 != null) { super.errors.addElement(new ParserException(238, var5)); } } boolean var12 = false; boolean var6 = false; Hashtable var7 = new Hashtable(); Enumeration var8 = this.getAttributes(true); while(var8.hasMoreElements()) { AttributeDeclaration var9 = (AttributeDeclaration)var8.nextElement(); if (var7.containsKey(((BaseDeclaration)var9).getName())) { super.errors.addElement(new ParserException(212, ((BaseDeclaration)var9).getName())); } else { var7.put(((BaseDeclaration)var9).getName(), var9); } if (var9.isID()) { if (var12) { super.errors.addElement(new ParserException(211, ((BaseDeclaration)var9).getName())); } else { var12 = true; } } if (var9.isNotation()) { if (var6) { super.errors.addElement(new ParserException(211, ((BaseDeclaration)var9).getName())); } else { var6 = true; } } } BaseDeclaration var13 = var1.getNamedDeclaration(((BaseDeclaration)this).getName(), this.getClass()); if (var13 != this) { super.errors.addElement(new ParserException(213, ((BaseDeclaration)this).getName())); } if (this.getCMisMixed()) { Hashtable var10 = new Hashtable(); this.visitTerms(new 3(var10, this), true); this.visitTerms(new 4(this), true); ContentModelTerm var11 = this.field_0.getRootGroup(); if (var11 != null && var11.getOccurance() != '*') { if (var11.isGroup() && var11.getOwner() == this) { var11.setOccurance('*'); } else { super.errors.addElement(new ParserException(228, "")); } } } if (this.getAllowsTags()) { this.visitTerms(new 5(this), true); } if (this.getSuperType() != null && this.getSuperType().getTargetObj() == null) { super.errors.addElement(new ParserException(269, this.getSuperTypeName())); } } public boolean isSubTypeOf(ElementDeclaration var1) { if (this.superType == null) { return false; } else { ElementDeclaration var2 = this.superType.getTargetElement(); if (var2 == null) { return false; } else { return var2 == var1 ? true : var2.isSubTypeOf(var1); } } } protected void releaseBindings() { if (this.superType != null) { this.superType.release(); } this.visitTerms(new 7(this), false); } protected void establishBindings() { if (this.superType != null) { this.superType.bind(((BaseDeclaration)this).getSchema(), this); } this.visitTerms(new 8(this), false); } public void setSuperType(String var1) { this.setSuperType(var1 == null ? null : new DeclRef(var1, Class.forName("com.extensibility.xml.ElementDeclaration"))); } public void setSuperType(DeclRef var1) { DeclRef var2 = this.superType; if (this.superType != null) { if (this.superType.isBound()) { this.superType.release(); } this.superType.removeChangeListener(this.changer); } this.superType = var1; if (var1 != null) { if (((BaseDeclaration)this).getSchema() != null) { var1.bind(((BaseDeclaration)this).getSchema(), this); } var1.addChangeListener(this.changer); } ((BaseDeclaration)this).fireChangeEvent(35, var2); } public DeclRef getSuperType() { return this.superType; } public String getSuperTypeName() { return this.superType == null ? null : this.superType.getName(); } public ContentModel getEffectiveModel() { ContentModel var1 = this.getContentModel(); if (this.getSuperType() != null && this.getSuperType().getTargetObj() != null) { ContentModel var2 = this.getSuperType().getTargetElement().getEffectiveModel(); var1 = (ContentModel)var2.clone(var1, true); } return var1; } public boolean cmContains(String var1) { return this.field_0.contains(var1); } public void add(AttributeGroupMember var1) { if (this.attributes.add(var1)) { ((BaseDeclaration)this).fireChangeEvent(33, var1); } } public void remove(AttributeGroupMember var1) { this.attributes.remove(var1); ((BaseDeclaration)this).fireChangeEvent(32, var1); } public Enumeration getOwnedAttributes() { return new FilteredEnumerator(this.getAttributes(false), Class.forName("com.extensibility.xml.AttributeDeclaration")); } public Enumeration getAttributes(boolean var1) { return this.attributes.getAttributes(var1); } public Vector getAttributesCopy() { Vector var1 = new Vector(); for(int var2 = 0; var2 < this.attributes.attributes.size(); ++var2) { var1.addElement(this.attributes.attributes.elementAt(var2)); } return var1; } public Vector updateAttributes(Vector var1) { Vector var2 = this.attributes.updateContents(var1); ((BaseDeclaration)this).fireChangeEvent(34, (Object)null); return var2; } public String getSource() { StringBuffer var1 = new StringBuffer(String.valueOf(String.valueOf("<!ELEMENT ").concat(String.valueOf(super.name))).concat(String.valueOf(" "))); String var2 = this.field_0.getSource(true); var1.append(var2); var1.append(String.valueOf(">").concat(String.valueOf(BaseDeclaration.LINE_SEPARATOR))); return var1.toString(); } public void setEmpty() { this.dataType = null; this.getContentModel().setEmpty(); } public void setTextOnly() { this.dataType = null; this.getContentModel().setTextOnly(); } public void setAny() { this.dataType = null; this.getContentModel().setAny(); } public void setMixed() { this.dataType = null; this.getContentModel().setMixed(); } public void setAllowsText(boolean var1) { if (var1 && this.dataType != null) { this.dataType = null; } this.setContentModel(var1, this.getAllowsTags()); } public void setContentModel(int var1) { this.field_0.setContentModel(var1); } public void setAllowsTags(boolean var1) { if (var1 && this.dataType != null) { this.dataType = null; } this.setContentModel(this.getAllowsText(), var1); } public void setAllowsData(boolean var1) { if (var1) { this.dataType = DataTypeFactory.createDataType(DataTypeIntf.STRING); } else { this.dataType = null; } this.setContentModel(true, false); } public void setDataType(DataType var1) { this.dataType = var1; this.setContentModel(true, false); } public BaseDeclaration asDecl() { return this; } public void addCMTerm(ElementDeclaration var1, char var2) { if (this.field_0.isEmpty()) { this.field_0.setContentModel(6); } else if (this.field_0.isAny()) { this.field_0.setContentModel(4); } ContentModelTerm var3 = this.field_0.getRootGroup(); Debug.assert(var3 != null, "no term to add it to..."); Debug.assert(var3.getOwner() == this, String.valueOf("wrong owner: ").concat(String.valueOf(var3.getOwner()))); var3.addTerm(new ContentModelTerm(new TypeRef(((BaseDeclaration)var1).getName()), var2, ',')); } public void setDataType(String var1) { this.dataType = DataTypeFactory.createDataType(var1); this.setContentModel(true, false); } public void setContentModel(boolean var1, boolean var2) { this.field_0.setContentModel(var1, var2); ((BaseDeclaration)this).fireChangeEvent(31, (Object)null); } public AttributeDeclaration getAttribute(String var1) { return this.attributes.getAttribute(var1); } public AttributeGroupMember getAttributeOrGroup(String var1) { return this.attributes.getAttributeOrGroup(var1); } public AttributeDeclaration getNotationAttr() { Enumeration var1 = this.attributes.getAttributes(true); while(var1.hasMoreElements()) { AttributeDeclaration var2 = (AttributeDeclaration)var1.nextElement(); if (var2.isNotation()) { return var2; } } return null; } public AttributeGroup getAttributeGroup() { return this.attributes; } public String getAttributesAsString(boolean var1) { return this.attributes.getAttributesAsString(var1); } public void write(Writer var1) throws IOException { super.fireOnMetaPropChange = false; try { var1.write(((BaseDeclaration)this).getCommentsAsSource()); var1.write(this.getSource()); Vector var2 = this.addMetaAttrs(); BaseDeclaration var3 = super.schema.getDeclarationAfter(this); if (var3 != null && var3 instanceof EntityDeclaration) { Object var4 = null; Vector var9 = this.attributes.getUsesList((Vector)null); if (var9 != null && var9.contains(var3)) { var3.write(var1); } } var1.write(this.attributes.getSource(!this.attributes.hasComments())); this.removeMetaAttrs(var2); var1.write(System.getProperty("line.separator")); } finally { super.fireOnMetaPropChange = true; } } private Vector addMetaAttrs() { Vector var1 = new Vector(); if (this.dataType != null && !this.dataType.equals(DataTypeFactory.createDataType(DataTypeIntf.NOTATED))) { ((BaseDeclaration)this).putMetaProp("dtype", this.dataType.getSource()); } else { ((BaseDeclaration)this).removeMetaProp("dtype"); } Enumeration var2 = ((BaseDeclaration)this).getMetaProps(); while(var2 != null && var2.hasMoreElements()) { String var3 = (String)var2.nextElement(); if (var3.indexOf(58) < 0) { Object var4 = ((BaseDeclaration)this).getMetaProp(var3); String var5; DataType var6; if (var4 instanceof String[]) { var6 = DataTypeFactory.createDataType(8); var5 = ""; String[] var7 = (String[])var4; for(int var8 = 0; var8 < var7.length; ++var8) { if (var5.equals("")) { var5 = var7[var8]; } else { var5 = String.valueOf(String.valueOf(var5).concat(String.valueOf(" "))).concat(String.valueOf(var7[var8])); } } } else { if (!(var4 instanceof String)) { continue; } var6 = DataTypeFactory.createDataType(7); var5 = (String)var4; } AttributeDeclaration var15 = new AttributeDeclaration(this, String.valueOf("e-").concat(String.valueOf(var3)), var6, true, var5); var1.addElement(var15); this.attributes.add(var15); } } Enumeration var9 = this.attributes.getAttributes(true); while(var9.hasMoreElements()) { AttributeDeclaration var10 = (AttributeDeclaration)var9.nextElement(); if (!var10.isPrimitive()) { boolean var12 = ((BaseDeclaration)var10).getFireOnMetaPropChange(); ((BaseDeclaration)var10).setFireOnMetaPropChange(super.fireOnMetaPropChange); ((BaseDeclaration)var10).putMetaProp("dtype", var10.getDataType().getSource()); ((BaseDeclaration)var10).setFireOnMetaPropChange(var12); } } Enumeration var11 = this.attributes.getMetaProps(); while(var11 != null && var11.hasMoreElements()) { String var13 = (String)var11.nextElement(); String var14 = this.attributes.getMetaProps(var13); AttributeDeclaration var16 = new AttributeDeclaration(this, String.valueOf("a-").concat(String.valueOf(var13)), DataTypeFactory.createDataType(8), true, var14); var1.addElement(var16); this.attributes.add(var16); } return var1; } private void removeMetaAttrs(Vector var1) { for(int var2 = var1.size() - 1; var2 >= 0; --var2) { this.attributes.remove((AttributeDeclaration)var1.elementAt(var2)); } ((BaseDeclaration)this).removeMetaProp("dtype"); Enumeration var3 = this.attributes.getAttributes(true); while(var3.hasMoreElements()) { AttributeDeclaration var4 = (AttributeDeclaration)var3.nextElement(); if (!var4.isPrimitive()) { boolean var5 = ((BaseDeclaration)var4).getFireOnMetaPropChange(); ((BaseDeclaration)var4).setFireOnMetaPropChange(super.fireOnMetaPropChange); ((BaseDeclaration)var4).removeMetaProp("dtype"); ((BaseDeclaration)var4).setFireOnMetaPropChange(var5); } } } public void addDependantsToSet(XASet var1) { Enumeration var2 = this.getOwnedAttributes(); while(var2.hasMoreElements()) { var1.addToSet(var2.nextElement()); } } public String getSampleData() { if (super.sampleData == null) { ContentModel var1 = this.getEffectiveModel(); if (var1.isAny()) { return BaseDeclaration.resourceBundle.getString("xml.exemplar.any"); } if (var1.isEmpty()) { return null; } if (this.getDataType() != null) { String var2; try { var2 = BaseDeclaration.resourceBundle.getString(String.valueOf("xml.exemplar.dt.").concat(String.valueOf(this.getDataType().getSource()))); } catch (MissingResourceException var4) { var2 = BaseDeclaration.resourceBundle.getString("xml.exemplar.text.only"); } return var2; } if (var1.isTextOnly()) { return BaseDeclaration.resourceBundle.getString("xml.exemplar.text.only"); } if (var1.isTagsOnly()) { return null; } if (var1.isMixed()) { return BaseDeclaration.resourceBundle.getString("xml.exemplar.text.mixed"); } } return super.sampleData; } private void updateRefMetaProp(String var1, String var2) { Enumeration var3 = this.refMetaProp.keys(); while(var3.hasMoreElements()) { String var4 = (String)var3.nextElement(); if (var4.equals(var1)) { Hashtable var5 = (Hashtable)this.refMetaProp.get(var4); this.refMetaProp.remove(var4); this.refMetaProp.put(var2, var5); return; } } } public void putCPMetaProp(String var1, String var2, String var3) { MetaPropHash var4 = (MetaPropHash)this.refMetaProp.get(var1); if (var4 == null) { var4 = new MetaPropHash(); this.refMetaProp.put(var1, var4); } var4.putMetaProp(var2, var3); } public Object getCPMetaProp(String var1, String var2) { MetaPropHash var3 = (MetaPropHash)this.refMetaProp.get(var1); return var3 == null ? null : var3.getMetaProp(var2); } public Enumeration getCPMetaProps(String var1) { MetaPropHash var2 = (MetaPropHash)this.refMetaProp.get(var1); return var2 == null ? null : var2.getMetaProps(); } public RHashtable getCPMetaProps() { return this.refMetaProp; } public void setCPMetaProps(RHashtable var1) { this.refMetaProp = var1; } public void removeCPMetaProp(String var1, String var2) { MetaPropHash var3 = (MetaPropHash)this.refMetaProp.get(var1); if (var3 != null) { var3.removeMetaProp(var2); } } }